package example.testBeanFactoryPostProcessor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;

//如果这里没有加上@Component注解，也就是没有将这个类交给spring来管理，那么这个工厂的后置处理器就不会生效
@Component
public class MyBeanFactoryPostPRocessor implements BeanFactoryPostProcessor {
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		//这个bean默认是单例的，现在我们通过一个类实现了BeanFactoryPostProcessor
		// ，那么我们就可以拿到ConfigurableListableBeanFactory，这样我们就可以修改bd定义,需要注意的是这一步其实是在对象构造出来之前执行的
		System.out.println("postProcessBeanFactory在对象构造出来之前执行");
		AnnotatedBeanDefinition needChangeBean = (AnnotatedBeanDefinition)beanFactory.getBeanDefinition("needChangeBean");
		needChangeBean.setScope("prototype");
	}
}
